class Person(object):
    # 在python中，变量名类似__xxxx__的，属于特殊变量，特殊变量是可以直接访问的不是私有变量

    # 构造函数
    def __init__(self, name, age, height, weight, money):
        # 对象属性，对象方法只能对象调用
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
        # 如果要让内部属性不被外部访问，可以把属性的前面加上两个下划线
        # python中，实例的变量以__开头，就变成一个私有属性（private），只能在内部访问
        # 不能在外部直接访问__money的原因是python解释器对外把__money属性改成了_Person__money。
        # 所以仍然可以用_Person__money来直接访问，但是强烈建议不要这样做，因为不同版本的python解释器
        # 可能把__money改成不同的属性名

        # 在python中_xxx变量，这样的实例变量是外部可以直接访问,但是按照约定俗称的规定
        # 当看到这样的变量时，意思是虽然我可以被外部直接访问，但是请把我视为私有变量，不要在
        # 外部直接访问
        self._temp = 2
        # 特殊变量
        self.__test__ = 1

        # 私有属性
        self.__money = money
    # 定义公有方法间接访问私有属性
    def getMoney(self):
        return self.__money

    def setMoney(self, money):
        if money > 0:
            self.__money = money


    # 析构方法：在释放对象时自动调用
    # 调用：释放一些不必要的内存
    def __del__(self):
        print("object delete")

    def say(self):
        return "my name is %s,I am %d years old"%(self.name, self.age)

per1 = Person("lifeibiao", 10, 20, 60, 100)
per1.age = 300
print(300)


# 间接访问私有属性
per1.setMoney(7800)
print(per1.getMoney())

# print(per1._Person__money) 不建议使用

print(per1.__test__)

print(per1._temp)




